#pragma once

#include "FFMacros.h"
#include "FFVector.h"
#include <iostream>
#include <ostream>
#include <string>

//FF_BEGIN

using namespace std;

class FFString : public std::string
{
protected:
    FFString prepareToParseVector(const char *p_separator);
    
public:
    FFString();
    FFString(const FFString &p_string);
    FFString(const FFString *p_string);
    FFString(const char *p_string);
    virtual ~FFString();
    
    FFString &operator =(const char *p_string);
    FFString &operator =(const std::string &p_string);
    FFString &operator =(const FFString &p_string);
    FFString &operator +=(int &p_integer);
    FFString &operator +(int &p_integer);
    operator const char *() const;
    
public:
    bool isEmpty() const;
    bool isEqual(const FFString &p_string) const;
    bool isEqual(const char *p_string) const;
    
    int parseInt() const;
    const char *parseCharP() const;
    float parseFloat() const;   
    FFVector<float> parseVectorOfFloats(const char *p_separator);
    FFVector<int> parseVectorOfInts(const char *p_separator);
    
    FFString replaceAll(const char *p_from, const char *p_to);
    
    FFVector<FFString> split(const char *p_separator);
    
    
public:
    static const FFString &emptyString();
};

//FF_END
